package com.trt.eatmeat.test;//给定一个只包括 '('，')'，'{'，'}'，'['，']' 的字符串 s ，判断字符串是否有效。
//
// 有效字符串需满足： 
//
// 
// 左括号必须用相同类型的右括号闭合。 
// 左括号必须以正确的顺序闭合。 
// 
//
// 
//
// 示例 1： 
//
// 
//输入：s = "()"
//输出：true
// 
//
// 示例 2： 
//
// 
//输入：s = "()[]{}"
//输出：true
// 
//
// 示例 3： 
//
// 
//输入：s = "(]"
//输出：false
// 
//
// 示例 4： 
//
// 
//输入：s = "([)]"
//输出：false
// 
//
// 示例 5： 
//
// 
//输入：s = "{[]}"
//输出：true 
//
// 
//
// 提示： 
//
// 
// 1 <= s.length <= 10⁴ 
// s 仅由括号 '()[]{}' 组成 
// 
// Related Topics 栈 字符串 👍 3019 👎 0


import java.util.HashMap;
import java.util.Map;
import java.util.Stack;

//leetcode submit region begin(Prohibit modification and deletion)
public class Solution {
    public boolean isValid(String s) {
        Map<Character,Integer> map = new HashMap<>();
        map.put('{',-1);
        map.put('}',1);
        map.put('[',-2);
        map.put(']',2);
        map.put('(',-3);
        map.put(')',3);

        Stack stack = new Stack();
        for (int i=0;i<s.length();i++){

            if(stack.empty()){
                stack.push(s.charAt(i));
                continue;

            }
           char obj = (char)stack.peek();
            if(map.get(s.charAt(i))==map.get(obj)*(-1)){
              stack.pop();
            }else {
                stack.push(s.charAt(i));
            }
        }
    return stack.empty();
    }

    public static void main(String[] args) {
        Solution solution  = new Solution();
       boolean flag= solution.isValid("{}[]{}}");
       System.out.println(flag);
    }
}
//leetcode submit region end(Prohibit modification and deletion)
